require "test/unit"
class Test_Koans<Test::Unit::TestCase
  def test_creating_arrays
    empty_array = Array.new
    assert_equal Array, empty_array.class
    assert_equal 0, empty_array.size 
  end

  def test_array_literals
    array = Array.new
    assert_equal [], array
    
    array[0] = 1
    assert_equal [1], array # array中的第一个元素为1
    
    array[1] = 2
    assert_equal [1,2], array  # array中的第二个元素为2
    
    array << 333
    assert_equal [1, 2, 333], array   # 在array中添加333这个元素
  end

  def test_accessing_array_elements
    array = [:peanut, :butter, :and, :jelly]
   
    assert_equal :peanut, array[0]  # array中的第一个元素是什么
    assert_equal :peanut, array.first  #同上
    assert_equal :jelly,  array[3]  # array中的第四个元素是什么
    assert_equal :jelly,  array.last  # array中的最后一个元素是什么
    assert_equal :jelly, array[-1]  # array中的倒数第一个元素是什么
    assert_equal :butter, array[-3]  # array中的倒数第三个元素是什么
  end
 
  def test_slicing_arrays
    array = [:peanut, :butter, :and, :jelly]
   
    assert_equal [:peanut],               array[0,1]  
    assert_equal [:peanut, :butter],      array[0,2]
    assert_equal [:and, :jelly],          array[2,2]
    assert_equal [:and, :jelly],          array[2,20]
    assert_equal [],                      array[4,0]
    assert_equal [],                      array[4,200]
    assert_equal nil,                     array[5,0]
  end
  # array[a,b]  将array中的元素从第a+1个开始共显示b个以array的形式输出
  
  def test_arrays_and_ranges
   assert_equal Range, (1..5).class
   assert_not_equal [1,2,3,4,5], (1..5)
   assert_equal [1,2,3,4,5], (1..5).to_a
   assert_equal [1,2,3,4], (1...5).to_a 
  end
  #主要是range，范围的用法， (1..5).to_a to_a代表转换为常数列，(1..5)代表从1到5，（包括5在内） (1...5)代表从1到5，但不包括5

  def test_pushing_and_popping_arrays
    array = [1,2]
    array.push(:last)

    assert_equal [1,2,:last], array
    popped_value = array.pop
    assert_equal :last, popped_value
    assert_equal [1,2], array
  end
  #  push的用法，添加一个元素到array的尾部
  #  pop 的用法， 删除array的最后一个元素

  def test_shifting_arrays
    array = [1,2]
    array.unshift(:first)
    assert_equal [:first, 1,2], array
    shifted_value = array.shift
    assert_equal :first, shifted_value
    assert_equal [1,2], array 
  end
  #shift的用法， 添加一个元素到array的首部，用array.unshift(string)
  # 删除array的第一个元素，使用array.shift
end
